/// POS (Point of Sale) 功能模块的入口文件。
///
/// 这个文件负责组装 POS 功能所需的所有依赖项（通过 Provider）
/// 并创建该功能模块的根 Widget (PosApp)。
/// 这种模式有助于将特定功能模块化，使其可以被独立加载和管理。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'application/notifiers/order_notifier.dart';
import 'data/repositories/mock_order_repository.dart';
import 'domain/repositories/order_repository.dart';
import 'presentation/screens/pos_screen.dart';
import '../../app/app_theme.dart';

/// 创建并返回 POS 应用的根 Widget。
///
/// 这个函数是延迟加载模块的入口点。当 `main.dart` 中的 `FutureBuilder`
/// 成功加载这个库后，会调用此函数来构建 POS 功能的主界面。
Widget createPosApp() {
    // 使用 MultiProvider 在 Widget 树的顶层注入多个依赖项。
  // 这种模式遵循了依赖注入（DI）的设计原则，将依赖项的创建和提供与消费方解耦，
  // 使得代码更易于测试和维护。
  return MultiProvider(
    providers: [
      // 提供 OrderRepository 的模拟实现。
      // 通过依赖注入，我们可以轻松地在不同环境下（如测试、生产）切换不同的实现。
      Provider<OrderRepository>(
        create: (_) => MockOrderRepository(),
      ),
      // 提供 OrderNotifier，它依赖于 OrderRepository。
      // ChangeNotifierProvider 使得 OrderNotifier 可以在 Widget 树中被监听，
      // 当 OrderNotifier 的状态发生变化时，相关的 Widget 会自动重建。
      ChangeNotifierProvider<OrderNotifier>(
        create: (context) => OrderNotifier(context.read<OrderRepository>()),
      ),
    ],
    child: const PosApp(),
  );
}

/// PosApp 是 POS 功能模块的根 Widget。
///
/// 它是一个无状态的 Widget (StatelessWidget)，负责构建 MaterialApp，
/// 设置应用的主题、标题和首页。
class PosApp extends StatelessWidget {
  const PosApp({super.key});

    @override
  Widget build(BuildContext context) {
    // MaterialApp 是一个实现了 Material Design 风格的应用容器。
    return MaterialApp(
      title: 'POS 系统',
      theme: AppTheme.lightTheme,
      // 应用的首页，即 POS 屏幕。
      home: const PosScreen(),
      // 在调试模式下，隐藏右上角的 DEBUG 横幅。
      debugShowCheckedModeBanner: false,
    );
  }
}